<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //将 Array.prototype.push 方法赋值给一个变量，这样就可以在代码中直接使用 nativePush 方法
      // const nativePush = Array.prototype.push
      // Array.prototype.push = function (v) {
      // console.log('push', v + 1)
      //这里的nativePush就是原生的上面的nativePush，下面调用push然后原生的在帮他调用push，并帮他把值改了,老师解释
      //修改了 Array.prototype.push 方法，所以现在 arr.push(100) 会调用修改后的 push 方法，而不是原来的 push 方法。修改后的 push 方法会在原来的 push 方法的基础上，将 v 的值加 1 后再返回。bito-ChatGPT解释
      //在这段代码中，Array.prototype.push函数被重写，新的push函数在调用原生的push函数之前，将传入的值加1。在这种情况下，this指代的是调用push方法的数组对象，也就是arr数组。ChatGPT解释
      // return nativePush.call(this, v + 1)
      // return nativePush.call(arr, v + 1)

      // this[this.length] = v + 1
      // return this.length
      // }
      // let arr = [1, 2, 3, 4]
      // const m = arr.push(100)
      // console.log(m, arr) //5 [1, 2, 3, 4, 101] 两个return结果一样
    </script>

    <script>
      const nativePush = Array.prototype.push
      Array.prototype.push = function (v) {
        return nativePush.call(this, v + 1)
      }
      let arr = [1, 2, 3, 4]
      const m = arr.push(100)
      console.log(m, arr)
    </script>
  </body>
</html>
